//package com.sgb.goods.utils.base.fragment;
//
//import androidx.databinding.ViewDataBinding;
//import androidx.fragment.app.Fragment;
//import androidx.fragment.app.FragmentTransaction;
//
//import com.sgb.goods.R;
//import com.sgb.goods.utils.base.BaseActivity;
//import com.sgb.goods.utils.base.viewmodel.BaseViewModel;
//
//import java.util.Map;
//
///**
// * 带fragment处理的BaseActivity基类扩展
// * @author cyj
// * @param <DB>
// * @param <VM>
// */
//public abstract class BaseFragmentActivity<DB extends ViewDataBinding, VM extends BaseViewModel> extends BaseActivity<DB, VM> {
//
//    /** 当前Fragment tag */
//    protected String currentTag = null;
//    /** 加载样式：全量加载。初始化时就加载全部fragment，优点是交互响应快，缺点是不能按需加载导致性能消耗 */
//    protected final int STYLE_LOAD_ALL = 0;
//    /** 加载样式(默认)：懒加载。初始化时默认加载第一个fragment其他按需加载，优点是节约性能，缺点是按需加载新的fragment存在响应等待 */
//    protected final int STYLE_LOAD_NEED = 1;
//
//    /**
//     * 装载Activity要执行的Fragment碎片
//     * @return
//     */
//    protected abstract Map<String, Fragment> getFragments();
//
//    /**
//     * 获取加载样式
//     * 重新此方法，可以改变默认加载样式
//     * @return
//     */
//    protected int getLoadStyle() {
//        return STYLE_LOAD_NEED;
//    }
//
//    /**
//     * 显示 Fragment
//     * 如果fragment加入太多，那么此处使用replace最优，因为过多的fragment在内存会导致性能低下，以后优化
//     * @param tag
//     */
//    final protected void showFragment(String tag) {
//        if(null == tag) {
//            throw new Error("无效的Fragment Tag，请检查！");
//        }
//        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
//        if(null != currentTag) {
//            // 隐藏上一个Fragment
//            Fragment lastFragment = getSupportFragmentManager().findFragmentByTag(currentTag);
//            if (lastFragment != null) {
//                fragmentTransaction.hide(lastFragment);
//            }
//        }
//
//        // 查找fragment并显示
//        Fragment fragment = getSupportFragmentManager().findFragmentByTag(tag);
//
//        if(null == fragment) {
//            for(Map.Entry<String, Fragment> entry : getFragments().entrySet()) {
//
//                if(STYLE_LOAD_ALL == getLoadStyle() && !entry.getValue().isAdded()) {
//                    entry.getValue().setArguments(getIntent().getExtras());
//                    fragmentTransaction.add(R.id.fl_fragments, entry.getValue(), entry.getKey());
//                    fragmentTransaction.hide(entry.getValue());
//                } else if(STYLE_LOAD_NEED == getLoadStyle() && tag.equals(entry.getKey()) && !entry.getValue().isAdded()) {
//                    entry.getValue().setArguments(getIntent().getExtras());
//                    fragmentTransaction.add(R.id.fl_fragments, entry.getValue(), entry.getKey());
//                    fragment = entry.getValue();
//                    break;
//                }
//            }
//        }
//
//        if(null != fragment) {
//            currentTag = fragment.getTag();
//            fragmentTransaction.show(fragment);
//        }
//        fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
//        fragmentTransaction.commitNowAllowingStateLoss();
//    }
//}
